#下载字幕


import subprocess  # 导入 subprocess 模块以执行外部命令
import os  # 导入 os 模块以处理文件和目录
import glob  # 导入 glob 模块以查找符合特定规则的文件路径名

# 配置部分
PROXY = "http://127.0.0.1:10809"  # 设置代理
COOKIES_FILE = r"D:\Downloads\www.youtube.com_cookies.txt"  # 指定 cookies 文件
VIDEO_URL = "https://www.youtube.com/watch?v=8EXrxGByJJg"  # 视频链接
OUTPUT_FILE = 'en.json'  # 设置目标文件名

def run_command_real_time(command):
    saveout = ''  # 初始化保存输出的字符串
    try:
        process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)  # 启动外部命令并允许获取标准输出和错误

        while True:  # 持续读取输出
            output = process.stdout.readline()  # 逐行读取输出
            if output == '' and process.poll() is not None:  # 如果没有输出且进程已结束，则退出循环
                break
            if output:  # 如果有输出
                print(output.strip())  # 打印当前输出行
                saveout += output.strip() + '\n'  # 将输出保存到字符串中

        return_code = process.poll()  # 获取命令的返回值
        if return_code != 0:  # 如果返回值不为0，表示命令执行失败
            error_output = process.stderr.read()  # 读取标准错误输出
            print(f"命令执行失败，返回码: {return_code}")  # 打印返回码
            print(f"错误信息: {error_output.strip()}")  # 打印错误信息

    except Exception as e:  # 捕获异常
        print(f"发生错误: {e}")  # 打印错误信息
    return saveout  # 返回保存的输出

if __name__ == "__main__":  # 如果是主程序
    list_command = [  # 定义列出字幕的命令
        "yt-dlp",
        "--list-subs",
        "--proxy", PROXY,  # 使用配置的代理
        "--cookies", COOKIES_FILE,  # 使用配置的 cookies 文件
        VIDEO_URL  # 使用配置的视频链接
    ]

    res = run_command_real_time(list_command)  # 执行命令并获取输出
    reslines = res.split('\n')  # 将输出按行分割成列表
    en = ''  # 初始化用于存储字幕信息的变量
    for i, v in enumerate(reslines):  # 遍历每行输出
        if 'English' in v:  # 查找包含简体中文的行
            en = v  # 保存找到的行
    print('-' * 20)  
    print(en)  # 打印找到的简体中文字幕信息
    print('-' * 20)  

    if True:  # 始终为真，执行以下代码
        download_command = [  # 定义下载字幕的命令
            "yt-dlp",
            "--skip-download",  # 跳过视频下载
            "--write-auto-subs",  # 写入自动生成的字幕
            "--sub-langs", "en",  # 设置下载的字幕语言为English
            "--sub-format", "json3",  # 设置字幕格式为 json3
            "--proxy", PROXY,  # 使用配置的代理
            "--cookies", COOKIES_FILE,  # 使用配置的 cookies 文件
            VIDEO_URL  # 使用配置的视频链接
        ]

        download_result = run_command_real_time(download_command)  # 执行下载命令并获取输出

        downloaded_files = glob.glob('*.*.json3')  # 查找当前目录下所有符合条件的文件
        if downloaded_files:  # 如果找到了文件
            original_file = downloaded_files[0]  # 假设只下载一个文件，取第一个
            os.rename(original_file, OUTPUT_FILE)  # 重命名下载的文件
            print(f"下载并保存的文件名: {OUTPUT_FILE}")  # 打印保存的文件名

            if os.path.exists(OUTPUT_FILE):  # 检查文件是否存在
                print(f"文件已保存为: {OUTPUT_FILE}")  # 打印保存的文件路径
            else:
                print("下载失败，未能保存文件。")  # 打印失败信息
        else:
            print("没有找到下载的字幕文件。")  # 如果没有找到文件，打印信息
